package com.own.component.store.core.method;

import com.own.component.store.core.method.base.BaseStore;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * StoreMap
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
@Component
public interface StoreMap<V> extends BaseStore {

    /**
     * 获取当前存储的键的map对象
     *
     * @param name 唯一key
     * @return map对象
     */
    Map<String, V> get(String name);

    /**
     * 获取值
     *
     * @param name 唯一key
     * @param key  map key
     * @return 值
     */
    V get(String name, String key);

    /**
     * 添加值
     *
     * @param name 唯一key
     * @param map  map对象
     */
    void putAll(String name, Map<String, V> map);

    /**
     * 添加值
     *
     * @param name  唯一key
     * @param key   map key
     * @param value 值
     */
    void put(String name, String key, V value);

    /**
     * 移除缓存
     *
     * @param name 唯一key
     * @param key  map key
     */
    void remove(String name, String key);

    /**
     * 是否存啊在
     *
     * @param name 唯一key
     * @param key  map key
     * @return 是否存在
     */
    boolean contains(String name, String key);

    /**
     * 获取缓存的长度
     *
     * @param name 唯一key
     * @param key  map key
     * @return 长度
     */
    Long size(String name, String key);

    /**
     * 获取所有的键set
     *
     * @param name 唯一key
     * @return set
     */
    Set<String> keySet(String name);

    /**
     * 获取所有的值set
     *
     * @param name 唯一key
     * @return 值列表
     */
    Collection<V> values(String name);

    /**
     * 类型名称
     *
     * @return 类型名称
     */
    @Override
    default String type() {
        return "hash";
    }

}
